
[dbo].[asi_DocumentEnsureFolder]
CREATE PROC [dbo].[asi_DocumentEnsureFolder]
@documentPath nvarchar(2000),
@organizationKey uniqueidentifier,
@userKey uniqueidentifier,
@loggedInUserGroupKey uniqueidentifier = '00000000-0000-0000-0000-000000000000',
@rootHierarchyKey uniqueidentifier = null
AS
BEGIN
DECLARE
@parent uniqueidentifier,
@documentRootName nvarchar(100),
@documentName nvarchar(100),
@ptr int,
@newSort int,
@documentKey uniqueidentifier,
@documentVersionKey uniqueidentifier,
@accessKey uniqueidentifier,
@hierarchyKey uniqueidentifier,
@parentFolderDepth int,
@parentFolderSortOrder int,
@tmp int
SELECT @accessKey = Convert(uniqueidentifier,ParameterValue)
FROM SystemConfig
WHERE ParameterName = 'Security.Token.EveryoneFullControlAccessKey'
AND OrganizationKey = @organizationKey
SET @ptr = CHARINDEX(N'/', @documentPath)
IF @ptr > 0
BEGIN
SET @documentRootName = SUBSTRING(@documentPath, 1, @ptr - 1)
SET @documentPath = SUBSTRING(@documentPath, @ptr + 1, LEN(@documentPath) - @ptr)
END
ELSE
BEGIN
SET @documentRootName = N'$'
IF @documentPath = N'$'
SET @documentPath = ''
END
IF @rootHierarchyKey IS NULL
BEGIN
SELECT @rootHierarchyKey = RootHierarchyKey
FROM HierarchyRoot
WHERE HierarchyRootName = @documentRootName
AND HierarchyRoot.OrganizationKey = @organizationKey
AND EXISTS(
SELECT 1
FROM AccessItem INNER JOIN UserToken ON AccessItem.Grantee = UserToken.Grantee OR AccessItem.Grantee = @loggedInUserGroupKey
WHERE AccessItem.AccessKey = HierarchyRoot.AccessKey
AND UserToken.UserKey = @userKey
AND (AccessItem.Permission&3)>0)
END
ELSE
BEGIN
SELECT @rootHierarchyKey = RootHierarchyKey
FROM HierarchyRoot
WHERE RootHierarchyKey = @rootHierarchyKey
AND HierarchyRoot.OrganizationKey = @organizationKey
AND EXISTS(
SELECT 1
FROM AccessItem INNER JOIN UserToken ON AccessItem.Grantee = UserToken.Grantee OR AccessItem.Grantee = @loggedInUserGroupKey
WHERE AccessItem.AccessKey = HierarchyRoot.AccessKey
AND UserToken.UserKey = @userKey
AND (AccessItem.Permission&3)>0)
END
IF @rootHierarchyKey IS NOT NULL
BEGIN
SET @hierarchyKey = @rootHierarchyKey
SET @parent = @rootHierarchyKey
SET @parentFolderDepth = 0
SET @parentFolderSortOrder = 0
WHILE LEN(@documentPath) > 0
BEGIN
SET @ptr = CHARINDEX(N'/', @documentPath)
IF @ptr > 0
BEGIN
SET @documentName = SUBSTRING(@documentPath, 1, @ptr - 1)
SET @documentPath = SUBSTRING(@documentPath, @ptr + 1, LEN(@documentPath) - @ptr)
END
ELSE
BEGIN
SET @documentName = @documentPath
SET @documentPath = N''
END
IF LEN(@documentPath) > 0
BEGIN
SET @documentKey = null
SELECT @parent = Hierarchy.ParentHierarchyKey,
@hierarchyKey = Hierarchy.HierarchyKey,
@parentFolderDepth = Hierarchy.Depth,
@parentFolderSortOrder = Hierarchy.SortOrder,
@documentKey = DocumentMain.DocumentKey,
@accessKey = DocumentMain.AccessKey
FROM Hierarchy INNER JOIN DocumentMain ON Hierarchy.UniformKey = DocumentMain.DocumentVersionKey AND DocumentMain.DocumentStatusCode IN (10,20,30,40,60)
WHERE Hierarchy.RootHierarchyKey = @rootHierarchyKey
AND Hierarchy.ParentHierarchyKey = @parent
AND DocumentMain.DocumentName = @documentName
IF @@ROWCOUNT = 0
BEGIN
SET @documentKey = NewID()
SET @documentVersionKey = NewID()
INSERT INTO UniformRegistry (UniformKey, ComponentKey)
SELECT @documentKey, ComponentKey
FROM ComponentRegistry
WHERE Name = 'Document'
AND InterfaceName = 'BusinessController'
INSERT INTO UniformRegistry (UniformKey, ComponentKey)
SELECT @documentVersionKey, ComponentKey
FROM ComponentRegistry
WHERE Name = 'DocumentVersion'
AND InterfaceName = 'BusinessController'
INSERT INTO DocumentMain (
DocumentKey,
DocumentTypeCode,
DocumentName,
DocumentVersionKey,
DocumentStatusCode,
AlternateName,
IsSystem,
AccessKey,
ContainsChildrenFlag,
StatusUpdatedByUserKey,
StatusUpdatedOn,
UpdatedByUserKey,
UpdatedOn,
CreatedByUserKey,
CreatedOn)
VALUES (
@documentKey,
'FOL',
@documentName,
@documentVersionKey,
40,
@documentName,
0,
@accessKey,
0,
@userKey,
GetDate(),
@userKey,
GetDate(),
@userKey,
GetDate())
SET @hierarchyKey = NewID()
EXEC asi_HierarchyGetFolderSortOut @parent, @rootHierarchyKey, @parentFolderSortOrder, @parentFolderDepth, @documentName, @newSort OUTPUT
INSERT INTO Hierarchy (HierarchyKey, RootHierarchyKey, ParentHierarchyKey, SortOrder, Depth, UniformType, UniformKey, IsChildAMemberOfParent)
SELECT @hierarchyKey, RootHierarchyKey, HierarchyKey, @newSort, Depth + 1, UniformType, @documentVersionKey, IsChildAMemberOfParent
FROM Hierarchy
WHERE HierarchyKey = @parent
SET @parent = @hierarchyKey
SET @parentFolderSortOrder = @newSort
SET @parentFolderDepth = @parentFolderDepth + 1
END
ELSE
BEGIN
SELECT @tmp = count(*)
FROM AccessItem INNER JOIN UserToken ON AccessItem.Grantee = UserToken.Grantee OR AccessItem.Grantee = @loggedInUserGroupKey
WHERE AccessItem.AccessKey = @accessKey
AND UserToken.UserKey = @userKey
AND (AccessItem.Permission&3)>0
IF @tmp > 0 AND @hierarchyKey IS NOT NULL
BEGIN
SET @parent = @hierarchyKey
END
ELSE
BEGIN
SET @parent = NULL
SET @documentPath = NULL
SET @hierarchyKey = NULL
END
END
END
END
SELECT @hierarchyKey
END
END
GO